Contemporary browsers and other applications allow plug-ins, which in general comprise hosted software code that interacts with the hosting browser/application to provide additional functionality. One reason for using plug-ins is to increase security, because the hosting browser limits the actions that the hosted code (which is generally untrusted) can perform. The Internet has become very dangerous, with malicious websites often attempting to cause a user to download and run harmful code that may damage the user's computer system or destroy the user's data. Thus, web browsers often include restrictions on the code that can run, and the plug-ins that are allowed to perform actions on the user's computer system. Plug-ins increase the size of the sandbox provided by the browser, because they allow more functionality on the web while decreasing the number of untrusted applications installed. One such plug-in is Microsoft® Silverlight™, which provides a platform that allows application developers to create rich web applications hosted in the browser that typically include animation, vector graphics, and/or media (e.g., audio/video) content playback. Another example plug-in is Adobe® Flash™.
In general, to play media a platform provides Application Programming Interfaces (APIs) that hosted application code calls to specify a location that stores specific media content, e.g., by specifying a Uniform Resource Locator (URL) that identifies a file or other container on a server that packages the media content. The platform then spawns network requests to start downloading the media. The platform parses the media content by unpacking it to extract the media content streams to provide them to a media pipeline for playback. Microsoft® Silverlight™, like other platforms, provides functionality to playback video and audio in a variety of formats (WMV (Windows Media Video), WMA (Windows Media Audio), MP3, H.264, AAC (Advanced Audio Coding)) by allowing an application to download or stream a file containing combinations of the supported formats. The types of audio and video formats that are allowed are not extensible and performing a conversion into one of the supported formats is resource intensive.
Unfortunately, as noted above, such platforms are typically limited to playing media content that is in one or more known formats anticipated by the platform designers. For example, the platform may include compressors and decompressors (codecs) for specific media types, such as Motion Picture Experts Group Version 4 (MPEG4 or MP4), DIVX, or other formats. Rapid evolution is common for codecs as new algorithms are discovered for further compressing media content and new scenarios are identified for conveying additional information associated with media content. Thus, over time a platform may come to support media formats that are out of date and are no longer popular or the most efficient. Platform updates are typically the only way of adding support for new media formats.
In addition, the platform designers have to perform extra work to implement support for each media format, which can make the platform implementation large and can slow the progress of adding new support for new media types to the platform. Some codecs are proprietary so that the platform designers cannot add support for media types that use the codecs without licensing the codecs from the codec provider, if at all. One reason that platforms often exert control over which codecs applications can use with the platform is to ensure security. Codecs often interact closely with computer system hardware to display video and playback audio, and can perform actions that are harmful to a user's computer system. Current systems trade broader media type support for security. Moreover, download speed is an often scrutinized metric for plug-ins, and as the platform size increases, the download speed decreases. Thus, platform designers may have an incentive to support fewer media formats to keep platform size small.